package com.czxy.changgou3.controller;

import com.czxy.changgou3.service.PayService;
import com.czxy.changgou3.utils.PayState;
import com.czxy.changgou3.vo.PayRequest;
import com.czxy.vo.BaseResult;
import com.github.wxpay.sdk.WXPayUtil;
import org.apache.commons.io.IOUtils;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Map;

/**
 * @ClassName PayController
 * @Description TODO
 * @Author MR.Zhang
 * @Date 2020/5/11 20:04
 * @Version 1.0
 **/
@RestController
@RequestMapping("/pay")
public class PayController {
    @Resource
    private PayService payService;

    @PostMapping
    public BaseResult payUrl(@RequestBody PayRequest payRequest){
        //获得路径
        String payUrl = payService.payUrl(payRequest.getSn());
        //返回
        return BaseResult.ok("成功获得").append("wxurl",payUrl);
    }

    @PostMapping("/callback")
    public void callback(HttpServletRequest request , HttpServletResponse response){
        System.out.println("支付成功了 ！ 哥们吱一声");
        try {
            //1 处理请求
            // 1.1 以流的方式，获得请求体（请求参数）
            ServletInputStream is = request.getInputStream();
            // 1.2 将流转换成字符串  "<xml></xml>"
            String xmlStr = IOUtils.toString(is, "UTF-8");
            // 1.3 将字符串转换Map
            Map<String, String> map = WXPayUtil.xmlToMap(xmlStr);

            //2 获得订单号，修改状态
            if("SUCCESS".equals(map.get("return_code")) &&
                    "SUCCESS".equals(map.get("result_code"))){  //返回状态码  &&  业务结果
                String sn = map.get("out_trade_no");
                System.out.println(sn);

                //3 响应规定格式的内容
                // 3.1 响应类型
                response.setContentType("text/xml");
                // 3.2 响应内容
                response.getWriter().print("<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>");
            } else {
                System.out.println("错误了");
            }

        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    /**
     * 手动查询支付状态
     * @param sn
     * @return
     */
    @GetMapping("/{sn}")
    public BaseResult query(@PathVariable("sn") Long sn){
        //查询
        PayState query = payService.query(sn);

        //成功 1
        if (query.getCode() == 1){
            return BaseResult.ok(query.getDesc());
        } else {
            return BaseResult.error(query.getDesc());
        }
    }


}